package cn.nai.DemoRan.demo11;
/*
选择一个目录 A，将 A 中的文件拷贝到目录 B 中。
设计要求：
（1） 从控制台输入要复制的源目录的路径，新建文件对象指向源目录的路径。如果源目录不存在或者输入的文件不是目录，则提示“无效目录！”。
 （2）从控制台输入目标目录路径，新建文件对象指向目标目录的路径。如果目标目录不
存在或者输入的文件不是目录，则提示“无效位置！”。
（3）创建复制文件方法。
   ※ 通过 listFiles()方法获取源目录下所有的子文件目录。
   ※ new File(目标目录，源目录子文件目录名)创建文件对象，如果当前子文件是
目录，则创建目录，递归调用复制文件方法；否则， 则复制文件到目标路径下。
 */
import java.io.*;
import java.util.Scanner;

public class CopyFiles {
    public static void main(String[] args) {
        Scanner a = new Scanner(System.in);
        System.out.println("请输入开始的目录地址：\n");
        String src = a.nextLine();
        File srcFile = new File(src);
        if (!srcFile.isDirectory() || !srcFile.exists() ){
            System.out.println("无效目录！");
            return ;
        }

        System.out.println("请输入复制到的目录地址：\n");
        String src2 = a.nextLine();
        File srcFile2 = new File(src2);
        if (!srcFile2.isDirectory() || !srcFile2.exists() ){
            System.out.println("无效目录！");
            return ;
        }

        copyFilesAToB(srcFile,srcFile2);

    }
    public static void copyFilesAToB(File a,File b){
        File[] files = a.listFiles();
        for (File file:files){
            File f = new File(b,file.getName());
            if (f.isDirectory()){
                f.mkdirs();
                copyFilesAToB(file,f);
            }else{
                try (FileReader reader = new FileReader(file);
                     FileWriter fw = new FileWriter(f,true);){
                    int i = 0;
                    while ((i = reader.read())!=-1){
                        fw.write(i);
                        fw.flush();
                    }
                } catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
    }
}
